import { fileURLToPath } from "node:url"

import type { FastifyInstance } from "fastify"
import { dirname, resolve } from "pathe"
import type { ViteDevServer } from "vite"

// 获取当前目录路径
const __dirname = dirname(fileURLToPath(import.meta.url))
const root = resolve(__dirname, "../..")

// 全局 Vite 服务器实例
let globalVite: ViteDevServer

// 注册 Vite 开发服务器到 Fastify
export const registerDevViteServer = async (app: FastifyInstance) => {
  // 动态导入 Vite
  const createViteServer = await import("vite").then((m) => m.createServer)

  // 创建 Vite 开发服务器
  const vite = await createViteServer({
    server: { middlewareMode: true }, // 中间件模式
    appType: "custom", // 自定义应用类型
    configFile: resolve(root, "vite.config.mts"), // Vite 配置文件
    envDir: root, // 环境变量目录
  })

  globalVite = vite // 保存全局实例

  // @ts-ignore
  app.use(vite.middlewares) // 使用 Vite 中间件
  return vite
}

// 获取 Vite 服务器实例
export const getViteServer = () => {
  return globalVite
}
